#pragma once

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

#ifdef __cplusplus
extern "C"
{
#endif

#define ADC_BUFFER_SIZE 4096                                   /* ADC数据采集长度 单位: 1byte */
#define ADC_TOTAL_CHANNEL_NUM 4                                /* ADC总通道数 */
#define FFT_DATA_NUM (ADC_BUFFER_SIZE / ADC_TOTAL_CHANNEL_NUM) /* FFT数据个数 单位: 4byte */

#define ADC_SAMPLE_FREQ 192000                                                                    /* ADC采样频率 单位: Hz */
#define ADC_SAMPLE_POINT_NUM FFT_DATA_NUM                                                         /* ADC 采样点数 1024 */
#define ADC_TARGET_SIGNAL_FREQ 24000                                                              /* 目标信号频率 24kHz中频 */
#define ADC_TARGET_LOCATION (ADC_TARGET_SIGNAL_FREQ * ADC_SAMPLE_POINT_NUM / ADC_SAMPLE_FREQ) // 目标信号在FFT输出中的位置 24000/(192000/1024) = 128

    typedef struct
    {
        float data_i;
        float data_q;
    } complex_data_t;

    typedef struct
    {
        uint32_t adc_sample_buf[ADC_BUFFER_SIZE];          /* ADC采样数据缓冲 4个通道 */
        complex_data_t complex_input_buf[2][FFT_DATA_NUM]; /* 复数输入缓冲 */
        float amp_output_buf[2][FFT_DATA_NUM];             /* 幅值输出缓冲 */
        float phase_output_buf[2][FFT_DATA_NUM];           /* 相位输出缓冲 */
    } fft_buff_t;

    void app_adc_processing_task(void);

#ifdef __cplusplus
}
#endif
